package com.example.understand_compose1.testcase_activity

import android.os.Bundle
import android.widget.Toast
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.recyclerview.widget.LinearLayoutManager
import com.example.understand_compose1.R
import com.example.understand_compose1.databinding.ActivityFetRecyclerViewBinding
import com.example.understand_compose1.testcase_activity.adapter.OnItemClickListener
import com.example.understand_compose1.testcase_activity.adapter.RcvAdapter

class FetRecyclerViewActivity : AppCompatActivity() {
    lateinit var binding: ActivityFetRecyclerViewBinding

    val names = arrayOf("小猫", "小狗", "小鸡", "老虎", "哈士奇")
    val icons = arrayOf(
        R.mipmap.qq_icon, R.mipmap.qq_icon,
        R.mipmap.qq_icon, R.mipmap.qq_icon, R.mipmap.qq_icon
    )

    val intros = arrayOf(
        "猫是菠萝头",
        "狗屎",
        "你干嘛哈哈哟",
        "猛虎喵喵喵",
        "柴家",
    )


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        binding = ActivityFetRecyclerViewBinding.inflate(layoutInflater)

        setContentView(binding.root)
        val rcv1 = binding.rcv1
//        TODO: 1. 必须设置layoutManger, 2. 必须设置adapter
        rcv1.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
        rcv1.adapter = RcvAdapter(this, names, icons, intros, object : OnItemClickListener {

            override fun onItemClick(position: Int) {
                Toast
                    .makeText(
                        this@FetRecyclerViewActivity,
                        "Item " + names[position] + " cliekd: " + position,
                        Toast.LENGTH_SHORT
                    )
                    .show()
            }
        })




        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }
    }
}

/*
使用`RecyclerView`来实现页面数据的展示是一种常见的做法，它允许你高效地展示大量数据。以下是使用`RecyclerView`的基本步骤：

### 1. 添加依赖

确保你的项目中已经添加了`RecyclerView`的依赖。在`build.gradle`文件中添加：
```gradle
implementation 'androidx.recyclerview:recyclerview:1.2.1'
```

### 2. 创建布局文件

在你的布局文件中添加`RecyclerView`。例如，在`activity_main.xml`中：
```xml
<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
```

### 3. 创建数据模型

创建一个数据模型类，用于表示`RecyclerView`中的每一项数据。例如：
```kotlin
data class Item(val title: String, val description: String)
```

### 4. 创建适配器

创建一个继承自`RecyclerView.Adapter`的适配器类，用于提供数据和视图。例如：
```kotlin
class MyAdapter(private val items: List<Item>) : RecyclerView.Adapter<MyAdapter.ViewHolder>() {

    class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val title: TextView = itemView.findViewById(R.id.title)
        val description: TextView = itemView.findViewById(R.id.description)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.item, parent, false)
        return ViewHolder(view)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val item = items[position]
        holder.title.text = item.title
        holder.description.text = item.description
    }

    override fun getItemCount() = items.size
}
```

### 5. 创建列表项布局文件

创建一个布局文件`item.xml`，用于定义`RecyclerView`中的每一项的布局。例如：
```xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="16dp">

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp"/>

    <TextView
        android:id="@+id/description"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>
```

### 6. 初始化RecyclerView

在你的Activity或Fragment中，初始化`RecyclerView`并设置适配器。例如，在Activity中：
```kotlin
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val recyclerView: RecyclerView = findViewById(R.id.recyclerView)
        recyclerView.layoutManager = LinearLayoutManager(this)
        val items = listOf(
            Item("Title 1", "Description 1"),
            Item("Title 2", "Description 2"),
            // Add more items as needed
        )
        recyclerView.adapter = MyAdapter(items)
    }
}
```

### 7. 处理滑动事件（可选）

如果你需要处理滑动事件，可以设置`RecyclerView.OnScrollListener`。

### 8. 添加动画（可选）

你可以使用`ItemAnimator`来为`RecyclerView`的添加和删除操作添加动画效果。

通过这些步骤，你可以使用`RecyclerView`来实现页面数据的展示。`RecyclerView`提供了高度的灵活性，允许你自定义布局、动画和滑动行为，以满足你的应用需求。

 */